

#include<iostream>
#include<signal.h>

#include <unistd.h>
#include <cstdio>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;
 void PrintPending(sigset_t&pend)
 {
    for(int i=31;i>=1;--i)
    {
        if(sigismember(&pend,i)==1)
        {
            cout<<"1";
        }
        else{
            cout<<"0";
        }
    }
    cout<<"\n\n"<<endl;
 }
int main()
{
    //创建需要屏蔽的信号
    sigset_t block_set,old_set;
    sigemptyset(&block_set);//位图的初始化
    sigaddset(&block_set,2);//把对应的二号位置置1

    //开始屏蔽信号
    sigprocmask(SIG_BLOCK,&block_set,&old_set);//写进内核中的block表中，进行对二号信号的屏蔽

    //peddling表来进行执行对应的方法

 int cnt =20;
    while(true)
    {
        //获取当前进程的pending信号集
        sigset_t pending;
        sigpending(&pending);
 
        //3.打印pending信号集
        PrintPending(pending);
 
        //4.解除对2号信号的屏蔽
        cnt--;
        
        if(cnt==0)
        {
            //解除信号的屏蔽
            std::cout << "解除对2号信号的屏蔽!!!" << std::endl;
           
            sigprocmask(SIG_SETMASK, &old_set, &block_set);
            //也可以使用signl函数对2号信号进行捕捉，设定自定义实现的方法.
        }
        sleep(1);
        
    }

    return 0;
}
